<template>
  <div>
 分类
  </div>
</template>

<script lang="ts"  setup>
// 1.interface 主要是描述对象的注解
    // 使用 interface 声明对象类型
    // ?可选属性  属性？：类型
    //- interface` 后面是接口名称，和类型别名的意思一样。
// - 指定 `接口名称` 作为变量的类型使用。
// - 接口的每一行只能有 `一个` 属性或方法，每一行不需要加分号。
    interface Icar{
      name:string,
      color:string,
      age?:number,
      run:()=>number
    }
    let obj:Icar={
        name:"奔驰",
        color:"红色",
        run(){
          return 888
        }
    }
    console.log(obj)
    // 2 . interface的继承 接口 extends 父级接口
    interface bigCar extends Icar{
      size:number,
      make:string
    }
    let obj2:bigCar={
        name:"挖掘机",
        color:"红色",
        size:345345,
        make:"中国",
        run(){}
    }

    //### type 类型别名 交叉类型{#type} 约束对象 注解对象
    // > 掌握：使用 `交叉类型` 实现接口的继承效果
    type Iphone={
        version:string,
        price:number,
        call:()=>void
    }
    let myphone:Iphone={
      version:"15promax",
      price:18889,
      call(){

      }
    }
    // type实现继承效果
    type NewPhone=Iphone & {
          color:string
    } 
    let myobj3:NewPhone={
       version:"15promax",
      price:18889,
      color:"红色",
      call(){

      }
    }
    // ts的interface和type类型有什么区别
    // type类型别名和接口非常相似，在许多情况下，
    // 可以在它们之间`自由选择`
    // type 不可重复定义
    // interface 重复定义会合并
    // 它们都继承，interface 使用 `extends` , type 使用 `&`继承
  


    // 4 ts的类型推断机制
   // 变量 age1 的类型被自动推断为：number
  //  在 TS 中存在类型推断机制，在没有指定类型的情况下，TS 也会给变量提供类型。
    // let age1 = 18;

</script>
